package com.atguigu.gmall.order.mapper;


import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

/**
* @author lfy
* @description 针对表【order_info_1(订单表 订单表)】的数据库操作Mapper
* @createDate 2022-03-21 16:49:50
* @Entity com.atguigu.gmall.order.domain.OrderInfo
*/
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {

    /**
     * 基于订单状态乐观锁的更新订单状态
     *  @param orderId   订单id
     * @param userId    用户id
     * @param expectStatus  如果订单目前是 expectStatus 状态
     * @param updateStatus  就改成  updateStatus
     * @param processStatus  顺便把  processStatus 也改了
     */
    void updateOrderStatus(@Param("orderId") Long orderId,
                           @Param("userId") Long userId,
                           @Param("expectStatus") String expectStatus,
                           @Param("updateStatus") String updateStatus,
                           @Param("processStatus") String processStatus);

    /**
     * 按照流水号修改订单状态
     * @param userId
     * @param trade_no
     * @param orderStatus
     * @param processStatus
     */
    void updateOrderStatusByTrade_no(@Param("userId") long userId,
                                     @Param("trade_no") String trade_no,
                                     @Param("orderStatus") String orderStatus,
                                     @Param("processStatus") String processStatus);

    /**
     * 按照对外流水号查询订单详情
     * @param out_trade_no
     * @param userId
     * @return
     */
    OrderInfo getOrderAndDetailsByOutTradeNo(@Param("out_trade_no") String out_trade_no, @Param("userId") long userId);

//    /**
//     * 按照订单id查询这个订单信息以及订单detail详情
//     * @param orderId
//     * @return
//     */
//    OrderInfo getOrderAndDetailByOrderId(@Param("orderId") Long orderId);

    /**
     * 修改订单状态
     * @param id
     * @param userId
     * @param orderStatus
     * @param processStatus
     */
    void updateOrderStatusById(@Param("id") Long id, @Param("userId") Long userId, @Param("orderStatus") String orderStatus, @Param("processStatus") String processStatus);
}




